package top.bulk.dbcrypto.util;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.extra.spring.SpringUtil;
import lombok.extern.slf4j.Slf4j;
import top.bulk.dbcrypto.config.CryptoProperties;

/**
 * 算法工具类，如果需要不同的算法，自行实现
 *
 * @author 散装java
 * @date 2024-07-26
 */
@Slf4j
public class CryptoUtil {

    /**
     * 获取aes 加密算法
     */
    public static AES aes() {
        CryptoProperties cryptoProperties = SpringUtil.getBean(CryptoProperties.class);
        String aesKey = cryptoProperties.getAesKey();
        return SecureUtil.aes(aesKey.getBytes());
    }

    /**
     * 获取aes 加密算法
     */
    public static String aesEncrypt(String value) {
        if (value == null) {
            return null;
        }
        try {
            return aes().encryptHex(value);
        } catch (Exception e) {
            log.error("CryptoUtil.aesEncrypt error:{}", e.getMessage(), e);
            return value;
        }
    }

    public static String aesDecrypt(String value) {
        if (StrUtil.isBlank(value)) {
            return value;
        }
        try {
            return aes().decryptStr(value);
        } catch (Exception e) {
            log.error("CryptoUtil.aesDecrypt error:{}", e.getMessage(), e);
            return value;
        }
    }
}
